/**
 * 
 */
package spring.webapp.anmeldesystem.service.impl;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import spring.webapp.anmeldesystem.entity.Fachbereich;
import spring.webapp.anmeldesystem.entity.Kurs;
import spring.webapp.anmeldesystem.entity.Student;
import spring.webapp.anmeldesystem.persistence.dao.FachbereichDao;
import spring.webapp.anmeldesystem.persistence.dao.KursDao;
import spring.webapp.anmeldesystem.persistence.dao.StudentDao;
import spring.webapp.anmeldesystem.service.StudentService;

/**
 * @author Songhua Cui
 * 
 */
@Service
@Transactional
public class StudentServiceImpl implements StudentService {

	@Autowired
	private StudentDao studentDao;
	@Autowired
	private KursDao kursDao;
	@Autowired
	private FachbereichDao fachbereichDao;

	/**
	 * @param email
	 * @return
	 */
	@Override
	public Student getStudentInformationen(String email) {
		Student student = studentDao.getStudentbyEmail(email);
		addKursToStudent(student);
		addFachbereichToStudent(student);
		return student;
	}

	private void addKursToStudent(Student student) {
		ArrayList<String> kursIds = kursDao.getKursIdByStudent(student.getId());
		List<Kurs> kurses = new ArrayList<Kurs>();
		for (String kursId : kursIds) {
			Kurs kurs = kursDao.getKursById(kursId);
			kurses.add(kurs);
		}
		student.setKurse(kurses);
	}

	private void addFachbereichToStudent(Student student) {
		ArrayList<Long> fachbereichIds = fachbereichDao
				.getFachbereichIdByStudent(student.getId());
		List<Fachbereich> fachbereich = new ArrayList<Fachbereich>();
		for (long fachbereichId : fachbereichIds) {
			Fachbereich fb = fachbereichDao.getFachbereichById(fachbereichId);
			fachbereich.add(fb);
		}
		student.setFachbereich(fachbereich);
	}

	/**
	 * @param studentId
	 * @return
	 */
	@Override
	public Student getStudentById(long studentId) {
		return studentDao.getStudentById(studentId);
	}

	/**
	 * @param studentId
	 * @return
	 */
	@Override
	public Student getStudentInfosById(long studentId) {
		return studentDao.getStudentInfosById(studentId);
	}
}
